#ifndef __CONTAINER_COMPONENT__
#define __CONTAINER_COMPONENT__

#include "../includes/includes.h"
#include "../elements/DockElement.h"
#include "ElementComponent.h"


class MainComponent;

class ContainerComponent  : public Component
{
public:
    //==============================================================================
	ContainerComponent (ElementComponent * parent_, DockElement * root_);
    ~ContainerComponent();

	void moveElement(ElementComponent * elem, ElementComponent * target);
	void addElement();
	void removeElement(ElementComponent * elementToRemove);

	void setParentElement(ElementComponent * element);
	ElementComponent * getParentElement();

	int getNumElements();
	ElementComponent * getElementAt(const int& index);

	void setContainerShown(const bool& shouldBeShown);
	bool isContainerShown();

    void paint (Graphics& g);
    void resized();

	void mouseDown(const MouseEvent& e);
	void mouseUp(const MouseEvent& e);
	void mouseMove(const MouseEvent& e);
	void mouseEnter(const MouseEvent& e);
	void mouseExit(const MouseEvent& e);

    //==============================================================================
    juce_UseDebuggingNewOperator

private:
    //==============================================================================
	OwnedArray<ElementComponent> elements;

	DockElement * root;

	ElementComponent * parentElement;

	bool isShown;
    //==============================================================================
    // (prevent copy constructor and operator= being generated..)
    ContainerComponent (const ContainerComponent&);
    const ContainerComponent& operator= (const ContainerComponent&);
};


#endif   // __JUCER_HEADER_MAINCOMPONENT_MAINCOMPONENT_D0F6CD31__
